﻿using ProyectoSalvadorDelMundo.Helpers;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ProyectoSalvadorDelMundo.Asambleas.AsignacionServicios
{
    public partial class AsignacionServicio : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                // Navegacion
                linkNav.NavigateUrl = ConfigurationManager.AppSettings.GetValues("linkNav-NavigateUrl")[0];
                linkNav.Text = ConfigurationManager.AppSettings.GetValues("linkNav-Text")[0];

                lblNavActiva.Text = ConfigurationManager.AppSettings.GetValues("lblNavActiva-Text")[0];
                lblNavActiva.CssClass = ConfigurationManager.AppSettings.GetValues("lblNavActiva-CssClass")[0];

                // Titulo
                lblTitulo.Text = ConfigurationManager.AppSettings.GetValues("lblTitulo-Text")[0];
                lblTitulo.CssClass = ConfigurationManager.AppSettings.GetValues("lblTitulo-CssClass")[0];

                // Buscar Servicio
                btnBuscarServicio.ImageUrl = ConfigurationManager.AppSettings.GetValues("btnBuscar-ImageUrl")[0];
                btnBuscarServicio.ToolTip = ConfigurationManager.AppSettings.GetValues("btnBuscar-ToolTip")[0];
                btnBuscarServicio.AlternateText = ConfigurationManager.AppSettings.GetValues("btnBuscar-AlternateText")[0];
                btnBuscarServicio.CssClass = ConfigurationManager.AppSettings.GetValues("btnBuscar-CssClass")[0];

                txtBuscarServicio.Attributes.Add("placeholder", ConfigurationManager.AppSettings.GetValues("txtBuscar-placeholder")[0]);
                txtBuscarServicio.CssClass = ConfigurationManager.AppSettings.GetValues("txtBuscar-CssClass")[0]; ;

                // Buscar Auto Servicio
                btnBuscarAutoServicio.ImageUrl = ConfigurationManager.AppSettings.GetValues("btnBuscar-ImageUrl")[0];
                btnBuscarAutoServicio.ToolTip = ConfigurationManager.AppSettings.GetValues("btnBuscar-ToolTip")[0];
                btnBuscarAutoServicio.AlternateText = ConfigurationManager.AppSettings.GetValues("btnBuscar-AlternateText")[0];
                btnBuscarAutoServicio.CssClass = ConfigurationManager.AppSettings.GetValues("btnBuscar-CssClass")[0];

                txtBuscarAutoServicio.Attributes.Add("placeholder", ConfigurationManager.AppSettings.GetValues("txtBuscar-placeholder")[0]);
                txtBuscarAutoServicio.CssClass = ConfigurationManager.AppSettings.GetValues("txtBuscar-CssClass")[0]; ;

                // Popup
                //-----------------
                lblAccionServicio.Visible = false;
                lblAccionServicio.Enabled = false;
                lblAccionServicio.Text = string.Empty;

                lblAccionAutoServicio.Visible = false;
                lblAccionAutoServicio.Enabled = false;
                lblAccionAutoServicio.Text = string.Empty;

                pnlAgregarEditarServicio.CssClass = "modal-dialog modal-lg";
                pnlAgregarEditarServicio.Attributes.Add("Style", "display: none");

                pnlAgregarEditarAutoServicio.CssClass = "modal-dialog modal-lg";
                pnlAgregarEditarAutoServicio.Attributes.Add("Style", "display: none");

                // Popup Header
                btnPopXServicio.Text = "X";
                btnPopXServicio.CssClass = "close";

                btnPopXAutoServicio.Text = "X";
                btnPopXAutoServicio.CssClass = "close";
                //btnPopX.Attributes.Add("data-dismiss", "modal");


                lblPopupTituloServicio.CssClass = "modal-title";
                lblPopupTituloAutoServicio.CssClass = "modal-title"; 

                // Popup Contenido
                txtIdServicio.Enabled = false;
                txtIdAutoServicio.Enabled = false;

                lblNombreServicio.Text = "Nombre";
                lblNombreServicio.AssociatedControlID = "txtNombreServicio";
                lblNombreServicio.CssClass = "col-sm-2 control-label";

                //lblAutoServidor.Text = "Nombre";
                //lblAutoServidor.AssociatedControlID = "txtNombreServicio";
                //lblAutoServidor.CssClass = "col-sm-2 control-label";

                lblNombreAutoServicio.Text = "Nombre";
                lblNombreAutoServicio.AssociatedControlID = "txtNombreAutoServicio";
                lblNombreAutoServicio.CssClass = "col-sm-2 control-label";

                txtNombreServicio.Attributes.Add("placeholder", "Ingresar Nombre");
                txtNombreServicio.CssClass = "form-control";

                txtNombreAutoServicio.Attributes.Add("placeholder", "Ingresar Nombre");
                txtNombreAutoServicio.CssClass = "form-control";

                // Popup Footer
                btnPopCerrarServicio.Text = "Cerrar";
                btnPopCerrarServicio.CssClass = "btn btn-default";
                btnPopCerrarAutoServicio.Text = "Cerrar";
                btnPopCerrarAutoServicio.CssClass = "btn btn-default";
                //btnPopCerrar.Attributes.Add("data-dismiss", "modal");

                btnPopGuardarServicio.Text = "Guardar Cambios";
                btnPopGuardarServicio.OnClientClick = "Guardar";

                btnPopGuardarAutoServicio.Text = "Guardar Cambios";
                btnPopGuardarAutoServicio.OnClientClick = "Guardar";


                lblServidor.Text = "Servidores Disponibles";
                lblServidor.AssociatedControlID = "ddlServidor";
                lblServidor.CssClass = "col-sm-2 control-label";

                lblAutoServidor.Text = "Servidores Disponibles";
                lblAutoServidor.AssociatedControlID = "ddlAutoServidor";
                lblAutoServidor.CssClass = "col-sm-2 control-label";

                //lblAsambleaActualA.CssClass = "control-label";
                //lblAsambleaActualB.CssClass = "control-label";

                ddlServidor.CssClass = "form-control";
                ddlAutoServidor.CssClass = "form-control";

                //this.Page.Form.DefaultButton = btnBuscar.ID;
                //this.Page.Form.DefaultFocus = txtBuscar.ID;
                this.Session["Grupo"] = "18";
                ddl.DataSource = new CN.Asambleas().Listar(Convert.ToInt64(this.Session["Grupo"]));
                ddl.DataTextField = "NOMBRE";
                ddl.DataValueField = "ID_ASAMBLEA";
                ddl.DataBind();
                if (ddl.Items.Count > 0)
                {
                    Dictionary<DateTime, long> dct = ObtenerFechas(CN.Helpers.EjecutarConsultaText("SELECT dia_asamblea FROM asambleas WHERE id_asamblea = " + Convert.ToInt64(ddl.SelectedValue) + ";").Rows[0][0].ToString(), Convert.ToInt64(ddl.SelectedValue));

                    foreach (KeyValuePair<DateTime, long> entry in dct)
                    {

                        ddlFechas.Items.Add(new ListItem(string.Format("{0:dd/MM/yyyy}", entry.Key), entry.Value.ToString()));
                    }
                    ddlFechas.SelectedIndex = 0;
                    var dtGruposServicios = CN.Helpers.EjecutarConsultaText("SELECT id_grupo_servicio,nombre FROM grupos_servicios WHERE id_asamblea = " + Convert.ToInt64(ddl.SelectedValue) + ";");
                    ddlGrupoServicios.DataSource = CN.Helpers.EjecutarConsultaText("SELECT id_grupo_servicio,nombre FROM grupos_servicios WHERE id_asamblea = " + Convert.ToInt64(ddl.SelectedValue) + ";");
                    ddlGrupoServicios.DataTextField = "NOMBRE";
                    ddlGrupoServicios.DataValueField = "id_grupo_servicio";
                    ddlGrupoServicios.DataBind();

                    ddlGruposAutoServicio.DataSource = CN.Helpers.EjecutarConsultaText("SELECT id_grupo_servicio,nombre FROM grupos_servicios WHERE id_asamblea = " + Convert.ToInt64(ddl.SelectedValue) + ";");
                    ddlGruposAutoServicio.DataTextField = "NOMBRE";
                    ddlGruposAutoServicio.DataValueField = "id_grupo_servicio";
                    ddlGruposAutoServicio.DataBind();

                    if (ddlGrupoServicios.Items.Count > 0)
                    {
                        lblAsambleaActualA.Text = "Servicios para la Asamblea: \"" + ddl.SelectedItem.Text + "\" que se celebrará el en la fecha:" + ddlFechas.SelectedItem.Text;
                        lblAsambleaActualB.Text = lblAsambleaActualA.Text;
                        RefrescarDatosServicio();
                        RefrescarDatosAutoServicio();
                    }
                    else
                    {
                        MostarError("No hay Grupos de Servicios para mostrar.");
                        tbServicios.Enabled = false;
                        tbAutoServicios.Enabled = false;
                    }



                }
                else
                {
                    MostarError("No hay Asambleas para mostrar.");
                    tbServicios.Enabled = false;
                    tbAutoServicios.Enabled = false;
                }

                
            }
        }

        protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
            //RefrescarDatos(Convert.ToInt64(ddl.SelectedValue));
                                                                    //"   AND servicios.id_grupo_servicio = '5' " 
            ddlFechas.Items.Clear();
            Dictionary<DateTime, long> dct = ObtenerFechas(CN.Helpers.EjecutarConsultaText("SELECT dia_asamblea FROM asambleas WHERE id_asamblea = " + Convert.ToInt64(ddl.SelectedValue) + ";").Rows[0][0].ToString(), Convert.ToInt64(ddl.SelectedValue));

            foreach(KeyValuePair<DateTime, long> entry in dct)
            {

                ddlFechas.Items.Add(new ListItem(string.Format("{0:dd/MM/yyyy}",  entry.Key), entry.Value.ToString()));
            }

            lblAsambleaActualA.Text = "Servicios para la Asamblea: \"" + ddl.SelectedItem.Text + "\" que se celebrará el en la fecha:" + ddlFechas.SelectedItem.Text;
            lblAsambleaActualB.Text = lblAsambleaActualA.Text;
            RefrescarDatosServicio();
            udpServicios.Update();
            RefrescarDatosAutoServicio();
            udpAutoServicio.Update();
        }
        protected void ddlFechas_SelectedIndexChanged(object sender, EventArgs e)
        {
            lblAsambleaActualA.Text = "Servicios para la Asamblea: \"" + ddl.SelectedItem.Text + "\" que se celebrará el en la fecha:" + ddlFechas.SelectedItem.Text;
            lblAsambleaActualB.Text = lblAsambleaActualA.Text;
            RefrescarDatosServicio();
            udpServicios.Update();
            RefrescarDatosAutoServicio();
            udpAutoServicio.Update();
        }

        private DataTable ListarServicio()
        {
            if (txtBuscarServicio.Text != string.Empty)
            {
                return CN.Helpers.EjecutarConsultaText("SELECT	id_servicio, " +
                                                        "		MAX(nombre) AS nombre,  " +
                                                        "        MAX(id_servidor) AS id_servidor,  " +
                                                        "        MAX(nombre_servidor) AS nombre_servidor " +
                                                        "	FROM ( 	SELECT 	id_servicio, " +
                                                        "					nombre,  " +
                                                        "                    NULL AS id_servidor,  " +
                                                        "                    NULL AS nombre_servidor  " +
                                                        "				FROM servicios  " +
                                                        "                WHERE 	id_asamblea = " + ddl.SelectedValue + " " +
                                                        "					AND id_grupo = " + this.Session["Grupo"] + " " +
                                                        "					AND id_grupo_servicio = 0 " +
                                                        "                    AND automatico = 0 " +
                                                        "                    AND nombre LIKE '" + txtBuscarServicio.Text + "' " +
                                                        "			UNION ALL " +
                                                        "			SELECT 	asignacion_servicios_asamblea.id_servicio,  " +
                                                        "					NULL AS nombre,  " +
                                                        "                    asignacion_servicios_asamblea.id_servidor,  " +
                                                        "                    CONCAT(servidores.nombre, ' ' ,servidores.apellido) As nombre_servidor  " +
                                                        "				FROM asignacion_servicios_asamblea " +
                                                        "					INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_programacion_asamblea = asignacion_servicios_asamblea.id_programacion_asamblea " +
                                                        "                    INNER JOIN servicios ON servicios.id_servicio = asignacion_servicios_asamblea.id_servicio " +
                                                        "					INNER JOIN servidores ON servidores.id_servidor = asignacion_servicios_asamblea.id_servidor " +
                                                        "				WHERE 	programaciones_asambleas.id_asamblea = " + ddl.SelectedValue + "  " +
                                                        "					AND servicios.id_grupo = " + this.Session["Grupo"] + " " +
                                                        "					AND id_grupo_servicio = 0 " +
                                                        "                    AND automatico = 0 " +
                                                        "                    AND servicios.nombre LIKE '" + txtBuscarServicio.Text + "' " +
                                                        "					AND asignacion_servicios_asamblea.id_programacion_asamblea = " + ddlFechas.SelectedValue + " " +
                                                        "			) AS DT " +
                                                        "	GROUP BY id_servicio; ");
            }
            else
            {
                return CN.Helpers.EjecutarConsultaText("SELECT	id_servicio, " +
                                                        "		MAX(nombre) AS nombre,  " +
                                                        "        MAX(id_servidor) AS id_servidor,  " +
                                                        "        MAX(nombre_servidor) AS nombre_servidor " +
                                                        "	FROM ( 	SELECT 	id_servicio, " +
                                                        "					nombre,  " +
                                                        "                    NULL AS id_servidor,  " +
                                                        "                    NULL AS nombre_servidor  " +
                                                        "				FROM servicios  " +
                                                        "                WHERE 	id_asamblea = " + ddl.SelectedValue + " " +
                                                        "					AND id_grupo = " + this.Session["Grupo"] + " " +
                                                        "					AND id_grupo_servicio = " + ddlGrupoServicios.SelectedValue + " " +
                                                        "                    AND automatico = 0 " +
                                                        " " +
                                                        "			UNION ALL " +
                                                        " " +
                                                        "			SELECT 	asignacion_servicios_asamblea.id_servicio,  " +
                                                        "					NULL AS nombre,  " +
                                                        "                    asignacion_servicios_asamblea.id_servidor,  " +
                                                        "                    CONCAT(servidores.nombre, ' ' ,servidores.apellido) As nombre_servidor  " +
                                                        "				FROM asignacion_servicios_asamblea " +
                                                        "					INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_programacion_asamblea = asignacion_servicios_asamblea.id_programacion_asamblea " +
                                                        "                    INNER JOIN servicios ON servicios.id_servicio = asignacion_servicios_asamblea.id_servicio " +
                                                        "					INNER JOIN servidores ON servidores.id_servidor = asignacion_servicios_asamblea.id_servidor " +
                                                        "				WHERE 	programaciones_asambleas.id_asamblea = " + ddl.SelectedValue + "  " +
                                                        "					AND servicios.id_grupo = " + this.Session["Grupo"] + " " +
                                                        "					AND id_grupo_servicio = " + ddlGrupoServicios.SelectedValue + " " +
                                                        "                    AND automatico = 0 " +
                                                        "					AND asignacion_servicios_asamblea.id_programacion_asamblea = " + ddlFechas.SelectedValue + " " +
                                                        "			) AS DT " +
                                                        "	GROUP BY id_servicio; ");
            }
        }

        private DataTable ListarAutoServicio()
        {
            if (txtBuscarServicio.Text != string.Empty)
            {
                return CN.Helpers.EjecutarConsultaText("SELECT	id_servicio, " +
                                                        "		MAX(nombre) AS nombre,  " +
                                                        "        MAX(id_servidor) AS id_servidor,  " +
                                                        "        MAX(nombre_servidor) AS nombre_servidor " +
                                                        "	FROM ( 	SELECT 	id_servicio, " +
                                                        "					nombre,  " +
                                                        "                    NULL AS id_servidor,  " +
                                                        "                    NULL AS nombre_servidor  " +
                                                        "				FROM servicios  " +
                                                        "                WHERE 	id_asamblea = '" + txtBuscarServicio.Text + "' " +
                                                        "					AND id_grupo = '" + this.Session["Grupo"] + "' " +
                                                        "					AND id_grupo_servicio = '" + ddlGruposAutoServicio.SelectedValue + "' " +
                                                        "                    AND automatico = 1 " +
                                                        "                    AND nombre LIKE '" + txtBuscarAutoServicio.Text + "' " +
                                                        " " +
                                                        "			UNION ALL " +
                                                        " " +
                                                        "			SELECT 	asignacion_servicios_asamblea.id_servicio,  " +
                                                        "					NULL AS nombre,  " +
                                                        "                    asignacion_servicios_asamblea.id_servidor,  " +
                                                        "                    CONCAT(servidores.nombre, ' ' ,servidores.apellido) As nombre_servidor  " +
                                                        "				FROM asignacion_servicios_asamblea " +
                                                        "					INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_programacion_asamblea = asignacion_servicios_asamblea.id_programacion_asamblea " +
                                                        "                    INNER JOIN servicios ON servicios.id_servicio = asignacion_servicios_asamblea.id_servicio " +
                                                        "					INNER JOIN servidores ON servidores.id_servidor = asignacion_servicios_asamblea.id_servidor " +
                                                        "				WHERE 	programaciones_asambleas.id_asamblea = '" + txtBuscarServicio.Text + "'  " +
                                                        "					AND servicios.id_grupo = '" + this.Session["Grupo"] + "' " +
                                                        "					AND id_grupo_servicio = '" + ddlGruposAutoServicio.SelectedValue + "' " +
                                                        "                    AND automatico = 1 " +
                                                        "                    AND servicios.nombre LIKE '" + txtBuscarAutoServicio.Text + "' " +
                                                        "					AND asignacion_servicios_asamblea.id_programacion_asamblea = '" + ddlFechas.SelectedValue + "' " +
                                                        "			) AS DT " +
                                                        "	GROUP BY id_servicio;");
            }
            else
            {
                return CN.Helpers.EjecutarConsultaText("SELECT	id_servicio, " +
                                                        "		MAX(nombre) AS nombre,  " +
                                                        "        MAX(id_servidor) AS id_servidor,  " +
                                                        "        MAX(nombre_servidor) AS nombre_servidor " +
                                                        "	FROM ( 	SELECT 	id_servicio, " +
                                                        "					nombre,  " +
                                                        "                    NULL AS id_servidor,  " +
                                                        "                    NULL AS nombre_servidor  " +
                                                        "				FROM servicios  " +
                                                        "                WHERE 	id_asamblea = '" + ddl.SelectedValue + "' " +
                                                        "					AND id_grupo = '" + this.Session["Grupo"] + "' " +
                                                        "					AND id_grupo_servicio = '" + ddlGruposAutoServicio.SelectedValue + "' " +
                                                        "                    AND automatico = 1 " +
                                                        " " +
                                                        "			UNION ALL " +
                                                        " " +
                                                        "			SELECT 	asignacion_servicios_asamblea.id_servicio,  " +
                                                        "					NULL AS nombre,  " +
                                                        "                    asignacion_servicios_asamblea.id_servidor,  " +
                                                        "                    CONCAT(servidores.nombre, ' ' ,servidores.apellido) As nombre_servidor  " +
                                                        "				FROM asignacion_servicios_asamblea " +
                                                        "					INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_programacion_asamblea = asignacion_servicios_asamblea.id_programacion_asamblea " +
                                                        "                    INNER JOIN servicios ON servicios.id_servicio = asignacion_servicios_asamblea.id_servicio " +
                                                        "					INNER JOIN servidores ON servidores.id_servidor = asignacion_servicios_asamblea.id_servidor " +
                                                        "				WHERE 	programaciones_asambleas.id_asamblea = '" + ddl.SelectedValue + "'  " +
                                                        "					AND servicios.id_grupo = '" + this.Session["Grupo"] + "' " +
                                                        "					AND id_grupo_servicio = '" + ddlGruposAutoServicio.SelectedValue + "' " +
                                                        "                    AND automatico = 1 " +
                                                        "					AND asignacion_servicios_asamblea.id_programacion_asamblea = '" + ddlFechas.SelectedValue + "' " +
                                                        "			) AS DT " +
                                                        "	GROUP BY id_servicio;");
            }
        }

        private void RefrescarDatosServicio()
        {
            lsvListaServicio.DataSource = ListarServicio();
            lsvListaServicio.DataBind();
        }
        private void RefrescarDatosAutoServicio()
        {
            lsvListaAutoServicio.DataSource = ListarAutoServicio();
            lsvListaAutoServicio.DataBind();
        }
        protected void OnPagePropertiesChangingServicio(object sender, PagePropertiesChangingEventArgs e)
        {
            (lsvListaServicio.FindControl("DataPager1") as DataPager).SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
            RefrescarDatosServicio();
        }
        protected void OnPagePropertiesChangingAutoServicio(object sender, PagePropertiesChangingEventArgs e)
        {
            (lsvListaAutoServicio.FindControl("DataPager1") as DataPager).SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
            RefrescarDatosAutoServicio();
        }

        protected void EditarServicio(object sender, EventArgs e)
        {
            ListViewDataItem item = (ListViewDataItem)(sender as Control).NamingContainer;
            Label lblID = (Label)item.FindControl("ID");
            Label lblNombre = (Label)item.FindControl("NOMBRE");
            Label lblID_Servidor = (Label)item.FindControl("ID_Servidor");
            txtIdServicio.Text = lblID.Text;
            txtNombreServicio.Text = lblNombre.Text;
            txtNombreServicio.Enabled = false;

            var strID = lblID_Servidor.Text;
            if (strID == "")
            {
                strID = "'%'";
                lblID_Servidor.Text = "0";
            }

            //var a = CN.Helpers.EjecutarConsultaText("SELECT id_servidor, " +
            //                                        "       Concat(nombre, ' ', apellido) nombre " +
            //                                        "FROM   servidores " +
            //                                        "WHERE  id_servidor NOT IN (	SELECT id_servidor " +
            //                                        "								FROM   `sistema-sas`.asignacion_servicios_asamblea " +
            //                                        "									INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_programacion_asamblea = asignacion_servicios_asamblea.id_programacion_asamblea " +
            //                                        "								WHERE  id_asamblea = '" + ddl.SelectedValue + "' AND programaciones_asambleas.id_programacion_asamblea = " + ddlFechas.SelectedValue + " AND id_servidor <> " + strID + " ) " +
            //                                        "	AND id_servidor NOT IN ( SELECT id_servidor " +
            //                                        "								FROM   permisos " +
            //                                        "								WHERE  id_programaciones_asambleas = " + ddlFechas.SelectedValue +  ") " +
            //                                        "	AND id_servidor NOT IN (SELECT id_servidor " +
            //                                        "								FROM   coordinadores " +
            //                                        "									INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_asamblea " +
            //                                        "								WHERE  fecha BETWEEN desde AND hasta) " +
            //                                        "	AND id_servidor IN (SELECT id_servidor FROM servicios_servidor WHERE id_servicio = " + lblID.Text + ") " +
            //                                        "	AND es_activo = 1;");
            var a = CN.Helpers.EjecutarConsultaText("CALL `sistema-sas`.`ServidoresDisponibles`(" + this.Session["Grupo"] + ", " + ddl.SelectedValue + ", " + ddlFechas.SelectedValue + ", " + lblID.Text + ");");

            var row = a.NewRow();
            row["id_servidor"] = 0;
            row["nombre"] = "N/A";
            a.Rows.InsertAt(row, 0);
            ddlServidor.DataSource = a;

            ddlServidor.DataTextField = "nombre";
            ddlServidor.DataValueField = "id_servidor";
            ddlServidor.DataBind();
            ddlServidor.SelectedValue = lblID_Servidor.Text;
            lblAccionServicio.Text = "Editar";
            lblPopupTituloServicio.Text = "Editar Servicio";
            btnPopGuardarServicio.Text = "Guardar Cambios";
            btnPopGuardarServicio.CssClass = "btn btn-primary";
            txtNombreServicio.Focus();
            popupServicio.Show();
        }

        protected void AsignarAutoServicios(object sender, EventArgs e)
        {

            CN.Helpers.EjecutarComandoText("CALL `sistema-sas`.`AsignarServicios`(" + this.Session["Grupo"] + ", " + ddl.SelectedValue + "," + ddlFechas.SelectedValue + ")");
            RefrescarDatosAutoServicio();

        }

        protected void EditarAutoServicio(object sender, EventArgs e)
        {
            ListViewDataItem item = (ListViewDataItem)(sender as Control).NamingContainer;
            Label lblID = (Label)item.FindControl("ID");
            Label lblNombre = (Label)item.FindControl("NOMBRE");
            Label lblID_Servidor = (Label)item.FindControl("ID_Servidor");
            txtIdAutoServicio.Text = lblID.Text;
            txtNombreAutoServicio.Text = lblNombre.Text;
            txtNombreAutoServicio.Enabled = false;

            var strID = lblID_Servidor.Text;
            if (strID == "")
            {
                strID = "'%'";
                lblID_Servidor.Text = "0";
            }

            //var a = CN.Helpers.EjecutarConsultaText("SELECT id_servidor, " +
            //                                        "       Concat(nombre, ' ', apellido) nombre " +
            //                                        "FROM   servidores " +
            //                                        "WHERE  id_servidor NOT IN (	SELECT id_servidor " +
            //                                        "								FROM   `sistema-sas`.asignacion_servicios_asamblea " +
            //                                        "									INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_programacion_asamblea = asignacion_servicios_asamblea.id_programacion_asamblea " +
            //                                        "								WHERE  id_asamblea = '" + ddl.SelectedValue + "' AND programaciones_asambleas.id_programacion_asamblea = " + ddlFechas.SelectedValue + " AND id_servidor <> " + strID + " ) " +
            //                                        "	AND id_servidor NOT IN ( SELECT id_servidor " +
            //                                        "								FROM   permisos " +
            //                                        "								WHERE  id_programaciones_asambleas = " + ddlFechas.SelectedValue + ") " +
            //                                        "	AND id_servidor NOT IN (SELECT id_servidor " +
            //                                        "								FROM   coordinadores " +
            //                                        "									INNER JOIN programaciones_asambleas ON programaciones_asambleas.id_asamblea " +
            //                                        "								WHERE  fecha BETWEEN desde AND hasta) " +
            //                                        "	AND id_servidor IN (SELECT id_servidor FROM servicios_servidor WHERE id_servicio = " + lblID.Text + ") " +
            //                                        "	AND es_activo = 1;");
            var a = CN.Helpers.EjecutarConsultaText("CALL `sistema-sas`.`ServidoresDisponibles`(" + this.Session["Grupo"] + ", " + ddl.SelectedValue + ", " + ddlFechas.SelectedValue + ", " + lblID.Text + ");");
            var row = a.NewRow();
            row["id_servidor"] = 0;
            row["nombre"] = "N/A";
            a.Rows.InsertAt(row, 0);
            ddlAutoServidor.DataSource = a;
            ddlAutoServidor.DataTextField = "nombre";
            ddlAutoServidor.DataValueField = "id_servidor";
            ddlAutoServidor.DataBind();
            ddlAutoServidor.SelectedValue = lblID_Servidor.Text;
            lblAccionAutoServicio.Text = "Editar";
            lblPopupTituloAutoServicio.Text = "Editar Servicio";
            btnPopGuardarAutoServicio.Text = "Guardar Cambios";
            btnPopGuardarAutoServicio.CssClass = "btn btn-primary";
            txtNombreAutoServicio.Focus();
            popupAutoServicio.Show();
        }

        protected void GuardarServicio(object sender, EventArgs e)
        {
            var strResultado = string.Empty;

            if (lblAccionServicio.Text == "Editar")
            {
                if (ddlServidor.SelectedValue != "")
                {
                    var strSql = "DELETE FROM asignacion_servicios_asamblea WHERE " +
                                                                " id_programacion_asamblea = " + ddlFechas.SelectedValue + " " +
                                                                " AND id_servicio = " + txtIdServicio.Text + "; ";
                    if (ddlServidor.SelectedValue != "0")
                    {
                        strSql += " INSERT INTO `sistema-sas`.`asignacion_servicios_asamblea` " +
                                                                "(`id_programacion_asamblea`, " +
                                                                "`id_servicio`, " +
                                                                "`id_servidor`) " +
                                                                "VALUES (" +
                                                                ddlFechas.SelectedValue + ", " +
                                                                txtIdServicio.Text + ", " +
                                                                ddlServidor.SelectedValue + ");";
                    }
                    strResultado = CN.Helpers.EjecutarComandoText(strSql);
                }

                popupServicio.Hide();
            }
            // Validacion del resultado de la consulta.
            if (strResultado == "Cambios aplicados con exito.")
            {
                MostarExito(strResultado);
            }
            else if (strResultado == "El registro no se puede borrar por que tiene reistros relacionados.")
            {
                MostarInfo(strResultado);
            }
            else
            {
                MostarError("Ocurrio un error inesperado al guardar los cambios.");
            }
            RefrescarDatosServicio();
        }

        protected void GuardarAutoServicio(object sender, EventArgs e)
        {
            var strResultado = string.Empty;

            if (lblAccionAutoServicio.Text == "Editar")
            {
                if (ddlAutoServidor.SelectedValue != "")
                {
                    var strSql = "DELETE FROM asignacion_servicios_asamblea WHERE " +
                                                                    " id_programacion_asamblea = " + ddlFechas.SelectedValue + " " +
                                                                    " AND id_servicio = " + txtIdAutoServicio.Text + "; ";
                    if (ddlAutoServidor.SelectedValue != "0")
                    {
                        strSql += "INSERT INTO `sistema-sas`.`asignacion_servicios_asamblea` " +
                                                                    "(`id_programacion_asamblea`, " +
                                                                    "`id_servicio`, " +
                                                                    "`id_servidor`) " +
                                                                    "VALUES (" +
                                                                    ddlFechas.SelectedValue + ", " +
                                                                    txtIdAutoServicio.Text + ", " +
                                                                    ddlAutoServidor.SelectedValue + ");";
                    }
                    strResultado = CN.Helpers.EjecutarComandoText(strSql);
                }
                popupAutoServicio.Hide();
            }
            // Validacion del resultado de la consulta.
            if (strResultado == "Cambios aplicados con exito.")
            {
                MostarExito(strResultado);
            }
            else if (strResultado == "El registro no se puede borrar por que tiene reistros relacionados.")
            {
                MostarInfo(strResultado);
            }
            else
            {
                MostarError("Ocurrio un error inesperado al guardar los cambios.");
            }
            RefrescarDatosAutoServicio();
        }

        protected void MostrarReporte(object sender, EventArgs e)
        {
            this.Session.Add("id_asamblea", ddl.SelectedValue);
            this.Session.Add("id_programacion_asamblea", ddlFechas.SelectedValue);
            this.Session.Add("asamblea", ddl.SelectedItem);
            this.Session.Add("asambleaFecha", ddlFechas.SelectedItem);
            Response.Redirect("~/Asambleas/AsignacionServicios/ReporteAsambleas.aspx");
        }

        protected void BuscarServicio(object sender, EventArgs e)
        {
            RefrescarDatosServicio();
        }
        protected void BuscarAutoServicio(object sender, EventArgs e)
        {
            RefrescarDatosAutoServicio();
        }

        protected void CerrarPopServicio(object sender, EventArgs e)
        {
            popupServicio.Hide();
        }
        protected void CerrarPopAutoServicio(object sender, EventArgs e)
        {
            popupAutoServicio.Hide();
        }

        protected void ddlGrupoServicios_SelectedIndexChanged(object sender, EventArgs e)
        {
            RefrescarDatosServicio();
        }
        protected void ddlGruposAutoServicio_SelectedIndexChanged(object sender, EventArgs e)
        {
            RefrescarDatosAutoServicio();
        }
        private Dictionary<DateTime, long> ObtenerFechas(string Dia, long IdAsamblea)
        {

            DateTime FechaActual = DateTime.Now.AddDays(0);

            int numDIa = 0;

            switch (Dia)
            {
                case "Domingo":
                    numDIa = (int)DayOfWeek.Sunday;
                    break;
                case "Lunes":
                    numDIa = (int)DayOfWeek.Monday;
                    break;
                case "Martes":
                    numDIa = (int)DayOfWeek.Tuesday;
                    break;
                case "Miercoles":
                    numDIa = (int)DayOfWeek.Wednesday;
                    break;
                case "Jueves":
                    numDIa = (int)DayOfWeek.Thursday;
                    break;
                case "Viernes":
                    numDIa = (int)DayOfWeek.Friday;
                    break;
                case "Sábado":
                    numDIa = (int)DayOfWeek.Saturday;
                    break;
            }

            DateTime FechaCalculada;

            int numDIaHoy = (int)FechaActual.DayOfWeek;

            if (numDIa == 0 || numDIaHoy == 0)
            {
                numDIa += 1;
                numDIaHoy += 1;
            }

            if (numDIaHoy <= numDIa)
            {
                FechaCalculada = FechaActual.AddDays(numDIa - numDIaHoy);
            }
            else
            {
                FechaCalculada = FechaActual.AddDays(numDIa - numDIaHoy + 7);
            }

            var Fechas =  new DateTime[5] { FechaCalculada.AddDays(-14), FechaCalculada.AddDays(-7), FechaCalculada, FechaCalculada.AddDays(7), FechaCalculada.AddDays(14) };
            string sql = "";
            string sqlIn = "";
            foreach (DateTime fecha in Fechas)
            {
                sql += "INSERT INTO programaciones_asambleas ( id_asamblea, fecha) " +
                        "SELECT * FROM (SELECT " + IdAsamblea + ", '" + string.Format("{0:yyyy/MM/dd}", fecha) + "') AS tmp " +
                        "WHERE NOT EXISTS ( " +
                        "    SELECT id_asamblea FROM programaciones_asambleas WHERE id_asamblea = " + IdAsamblea + " AND fecha = '" + string.Format("{0:yyyy/MM/dd}", fecha) + "' " +
                        ") LIMIT 1;";
                sqlIn += "'" +string.Format("{0:yyyy/MM/dd}", fecha) + "',";
            }
            sqlIn = sqlIn.Trim().Trim(',');
            sql += "SELECT fecha,id_programacion_asamblea FROM `sistema-sas`.programaciones_asambleas WHERE fecha IN(" + sqlIn + ") ORDER BY fecha;";
            DataTable dtFechas = CN.Helpers.EjecutarConsultaText(sql);
            Dictionary<DateTime, long> dictionary = new Dictionary<DateTime, long>();
            foreach (DataRow row in dtFechas.Rows)
            {
                dictionary.Add(Convert.ToDateTime( row["fecha"]), Convert.ToInt64( row["id_programacion_asamblea"]));
            }
            return dictionary;
        }
    }
}